// ++++++++++++++++++++++++++++++++++++++++
// 《Go 语言+Vue.js 实战派——基于 Gin 框架》源码
// ++++++++++++++++++++++++++++++++++++++++
// 作者公众号：源码大数据
// 自媒体账号（抖音、视频号、快手、B站、知乎）：廖显东-ShirDon
// 仓库地址：https://gitee.com/shirdonl/goGinVue.git
// 仓库地址：https://github.com/shirdonl/goGinVue.git
// 博客：https://www.shirdon.com
// 购买图书：https: //item.jd.com/14958064.html
// ++++++++++++++++++++++++++++++++++++++++

package main

import "fmt"

// 联合运算符和类型近似一起使用，没有接口
func Max[T ~int | ~float32 | ~float64](a, b T) T {
	if a > b {
		return a
	}
	return b
}

// TypeInteger 由所有 int 类型组成
type TypeInteger interface {
	~int | ~int8 | ~int16 | ~int32 | ~int64
}

// TypeFloat 由所有的float类型组成
type TypeFloat interface {
	~float32 | ~float64
}

// TypeNumber 由TypeInteger和TypeFloat类型组成
type TypeNumber interface {
	TypeInteger | TypeFloat
}

func Min[T TypeNumber](a, b T) T {
	if a < b {
		return a
	}
	return b
}

type Num int

func main() {
	// 创建点类型
	a, b := Num(6), Num(8)

	fmt.Println(Min(a, b))
}

//$ go run generics7.go
//6
